/**
 *
 */
package org.SSV.MN.client.usr;

import org.me.client.AnalisierteFunktion;
import org.me.client.FehlungDerFunktionenReihe;
import org.me.client.FehlungDerMethode;
import org.me.client.FehlungDerVariable;
import org.me.client.NumerischeMethoden;
import org.me.client.NumerischeOperationen;
import org.me.client.RecursiveDescentParser;
import org.me.client.Variable;
import org.me.client.VariablenReihe;

//hieraus
import org.SSV.MN.client.usr.Composite201941;
import org.SSV.MN.client.usr.Composite661726;
import org.SSV.MN.client.usr.Composite661727;
import org.SSV.MN.client.usr.Composite661728;
import org.SSV.MN.client.usr.Composite661729;
//hierher
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;

/**
 * @author Yo
 * 
 */
public class TempMth {
	public static void Solve_3(Widget[] args) {
		/*
		 * org.SSV.MN.client.usr.TempMth.Solve_3(new Widget[] { Composite201941,
		 * Composite661726, Composite661727, Composite661728, Composite661729,
		 * TextArea327647, Composite24595 });
		 */
		String[][] desJakobischenAusdruecke = ((Composite201941) args[0])
				.rTextDerKaesten();
		String[] eVariablenAusdruecke = ((Composite661726) args[1])
				.rTextDerKaesten();
		String[] eFunktionenAusdruecke = ((Composite661727) args[2])
				.rTextDerKaesten();
		String[] eAusdrueckeFuerDerErsteSchaetzung = ((Composite661728) args[3])
				.rTextDerKaesten();
		TextArea console = (TextArea) args[5];
		FlowPanel flowpanel = (FlowPanel) args[6];
		Variable[] konstante = new Variable[] { new Variable("pi", Math.PI),
				new Variable("e", Math.E) };
		AnalisierteFunktion[] F = new AnalisierteFunktion[3];
		AnalisierteFunktion[][] J = new AnalisierteFunktion[3][3];
		Variable[] X = new Variable[3];
		Number[] X_0 = new Number[3];
		for (int i = 0; i < X_0.length; i++) {
			X_0[i] = new Double((new RecursiveDescentParser(
					eAusdrueckeFuerDerErsteSchaetzung[i])).eval());
			X[i] = new Variable("x", i + 1, X_0[i]);
		}
		for (int i = 0; i < F.length; i++) {
			F[i] = new AnalisierteFunktion(eFunktionenAusdruecke[i], X,
					konstante);
			for (int j = 0; j < X_0.length; j++) {
				J[i][j] = new AnalisierteFunktion(
						desJakobischenAusdruecke[i][j], X, konstante);
			}
		}

		VariablenReihe sErgebnis = null;
		int sigfigs = (int) Math.abs(Math.round(NumerischeOperationen.logb(
				(new Double(((TextBox) flowpanel.getWidget(1)).getText()))
						.doubleValue(), 10.0)));
		Double tol = new Double(((TextBox) flowpanel.getWidget(1)).getText());
		String[] R = new String[F.length];
		boolean verbose = ((CheckBox) (flowpanel.getWidget(4))).isChecked();
		boolean sek = ((RadioButton) (flowpanel.getWidget(3))).isChecked();
		try {
			if (!sek) {
				sErgebnis = NumerischeMethoden
						.NewtonmethodeFuerVerschiedeneVariable(F, J, X, X_0,
								tol, 200, verbose);
			}
			if (sek) {
				sErgebnis = NumerischeMethoden.Broyden_Sherman_Morrison(F, X,
						X_0, tol, 200, verbose);
			}
			if (sErgebnis == sErgebnis) {
				for (int i = 0; i < R.length; i++) {
					R[i] = sErgebnis.getVariablen()[i].getGegenwert()
							.toString();
				}
			}
			if (!verbose) {
				console.setText(NumerischeMethoden.druecken(sErgebnis
						.variablenAbzuschaetzen(), sigfigs, 3, false,
						new char[] { '{', '}' }));
			}
		} catch (FehlungDerMethode e) {

		} catch (FehlungDerVariable e) {

		} catch (org.me.client.VerboseException e) {
			for (int i = 0; i < R.length; i++) {
				R[i] = ((org.me.client.NummerMatrix) e.getSErgebnis())
						.sElementGeben(i, 0).toString();
			}
			String verboseText = e.getVerbose().toString();
			console.setCharacterWidth(verboseText.length());
			console.setText(console.getText() + e.getVerbose().toString()
					+ "\n");
		} catch (FehlungDerFunktionenReihe e) {

		}
		((Composite661729) args[4]).eTexteDerKaestenSetzen(R);
	}

	public static Number[] eVariablenAusdrueckeNehmen() {
		return null;
	}

	public static void reset(Widget[] args) {
		Composite201941 desJakobischenAusdruecke = ((Composite201941) args[0]);
		Composite661726 eVariablenAusdruecke = ((Composite661726) args[1]);
		Composite661727 eFunktionenAusdruecke = ((Composite661727) args[2]);
		Composite661728 eAusdrueckeFuerDerErsteSchaetzung = ((Composite661728) args[3]);
		Composite661729 sErgebnis=(Composite661729) args[4];
		TextArea console = (TextArea) args[5];
		FlowPanel flowpanel= (FlowPanel) args[6];
		
		console.setText("");
		sErgebnis.reset();
		desJakobischenAusdruecke.reset();
		eVariablenAusdruecke.reset();
		eFunktionenAusdruecke.reset();
		eAusdrueckeFuerDerErsteSchaetzung.reset();
		((TextBox)flowpanel.getWidget(1)).setText("1E-08");
		((RadioButton)flowpanel.getWidget(2)).setChecked(true);
		((CheckBox)flowpanel.getWidget(4)).setChecked(false);
		((TextBox)flowpanel.getWidget(6)).setText("3");
	}

	public static void delStr(Widget[] args) {
		Composite201941 desJakobischenAusdruecke = ((Composite201941) args[0]);
		Composite661726 eVariablenAusdruecke = ((Composite661726) args[1]);
		Composite661727 eFunktionenAusdruecke = ((Composite661727) args[2]);
		Composite661728 eAusdrueckeFuerDerErsteSchaetzung = ((Composite661728) args[3]);
		Composite661729 sErgebnis=(Composite661729) args[4];
		TextArea console = (TextArea) args[5];
		FlowPanel flowpanel= (FlowPanel) args[6];
		
		sErgebnis.reset();
		desJakobischenAusdruecke.delStr();
		eVariablenAusdruecke.delStr();
		eFunktionenAusdruecke.delStr();
		eAusdrueckeFuerDerErsteSchaetzung.reset();
		console.setText("");
		((TextBox)flowpanel.getWidget(1)).setText("1E-08");
		((RadioButton)flowpanel.getWidget(2)).setChecked(true);
		((CheckBox)flowpanel.getWidget(4)).setChecked(false);
		((TextBox)flowpanel.getWidget(6)).setText("3");
	}
}
